#include <typescommon.h>
// 数组：char a[10]; a的值不能改；内容可以改；a的值和&a都是自己；
// 指针：char *a; a的值可以改；内容可改；a的值与&a不同；
// 常量指针：char const *a; a的值可以改；内容不可改；a的值与&a不同；
// 指针常量：char * const a; a的值不可变；内容可变；a的值与&a不同；

#define PRE_COMPILE_FAIL_FLAG 0
int main(int argc, char **argv)
{
    {
        // 数组
        char tmpa[10];
        logdebug("a=%p;&a=%p", tmpa, &tmpa);//值与取地址一样。
        tmpa[0] = 1; // 内容可变
#if PRE_COMPILE_FAIL_FLAG
        tmpa += 1; // 值不可变。
#endif
    }

    {
        // 指针
        char *tmpa = (char *)malloc(10);
        char *tmpo = tmpa;
        logdebug("a=%p;&a=%p", tmpa, &tmpa);//不一样。
        tmpa[0] = 1; // 内容可变
        tmpa += 1;// 值可变。
#if PRE_COMPILE_FAIL_FLAG
        free(tmpa);// 不是malloc分配的地址会导致崩溃。
#else
        free(tmpa);
#endif
    }

    {
        // 常量指针
        char const *tmpa = (char *)malloc(10);
        char *tmpo = (char *)tmpa;
        logdebug("a=%p;&a=%p", tmpa, &tmpa);//不一样。
#if PRE_COMPILE_FAIL_FLAG
        tmpa[0] = 1; // 内容不可变
#endif
        tmpa += 1;// 值可变。
#if PRE_COMPILE_FAIL_FLAG
        free(tmpa);// 不是malloc分配的地址会导致崩溃。
#else
        free(tmpo);
#endif
    }

    {
        // 指针常量
        char * const tmpa = (char *)malloc(10);
        char *tmpo = tmpa;
        logdebug("a=%p;&a=%p", tmpa, &tmpa);//不一样。
        tmpa[0] = 1; // 内容可变
#if PRE_COMPILE_FAIL_FLAG
        tmpa += 1;// 值不可变。
#endif
#if PRE_COMPILE_FAIL_FLAG
        free(tmpa);// 不是malloc分配的地址会导致崩溃。
#else
        free(tmpo);
#endif
    }

    return 1;
}
